#pragma once

#include "global_config.h"

typedef void (*public_task_cb_t)(void *arg);
typedef void (*public_task_start_cb_t)(public_task_cb_t cb, void *arg, uint32_t period);

/////////////////////////////////////驱动应满足的条件///////////////////////////////////////////

/**
 * @brief 滴答定时ms调用一次此接口提供时基
 */
void public_sys_tick_update(uint8_t ms);

/**
 * @brief 嘀嗒清零
 */
void public_sys_tick_clear(void);

/**
 * @brief 注册任务启动回调
 *
 * @param cb
 */
void public_task_register_cb(public_task_start_cb_t cb);

/////////////////////////////////////用户可使用的接口////////////////////////////////////////////

/**
 * @brief 获取系统滴答数
 *
 * @return uint32_t
 */
uint32_t public_sys_tick_get(void);

/**
 * @brief 启动任务
 *
 * @param cb 任务回调
 * @param arg 用户数据
 * @param period 定时多少ms后启动,0则立即启动
 */
void public_task_start(public_task_cb_t cb, void *arg, uint32_t period);
